#ifndef PROCEDIMENTO_H_
#define PROCEDIMENTO_H_

#include "NoHash.h"
#include "VariavelSimples.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Procedimento : public NoHash
{
public:
	Procedimento();
	virtual void mostra(){cout<<"merda";};
	int GetCategoria(){return mCategoria;};
	virtual void SetId(string);
	virtual void SetCategoria(int);
	virtual void SetNivel(int);
	virtual void SetPassagem(int);//parametro referencia
	virtual void SetNumParametros();
	virtual void InsereParamentro(VariavelSimples*);//insere um parametro
	virtual void R();
	virtual int GetNivel(){return mNivel;};
	virtual void SetTipoFuncao(int);
	virtual void Ret(){cout<<mId;};
	virtual int RetTipo(){return mTipo;};
	virtual string GetId();
	virtual void SetDeslocamento(int a){mDeslocamento = a;};
	
	virtual int RetDeslocamento(){return mDeslocamento;};
	virtual int getNumParametros(){return mParametros.size();};
	virtual int GetDeslocamento(int a){return mParametros.at(a)->RetDeslocamento();};
	virtual int GetParametros(int i){return mParametros.at(i)->RetTipo();};
	virtual int GetPassagem(int a){return mParametros.at(a)->GetPassagem();};
	virtual ~Procedimento();

	virtual int GetPassagem(){return mPassagem;};
private:
	string mId; // nome do parametro
	int mCategoria; // categoria da variavel
	int mDeslocamento;
	int mNivel; //nivel onde a variavel se encontra
	string mRotuloInterno; //
	int mPassagem; // tipo de passagem valor ou referencia
	int mNumeroParametros; // numero de parameros no procedimento
	int mTipo; // integer ou string
	vector<VariavelSimples*> mParametros; // parametros do procedimento
};

#endif /*PROCEDIMENTO_H_*/
